package Beans;

import java.io.Serializable;

/**
 * Klasse som blir brukt for å lagre deltaker-opplysninger
 * @author Gruppe1
 */
public class Deltaker implements Serializable {
    String fnavn;
    String enavn;
    String epost;
    String adresse;
    int faar;
    String kjonn;
    int deltaker_id;
    String passord1 = "";
    String passord2 = "";
    
    boolean editable;

    /**
     * Henter passord1; første innskrivning
     * @return passord1
     */
    public String getPassord1() {
        return passord1;
    }

    /**
     * Setter passord1
     * @param passord1
     */
    public void setPassord1(String passord1) {
        this.passord1 = passord1;
    }

    /**
     * Henter passord2; andre innskrivning
     * @return passord2 andre innskrivning
     */
    public String getPassord2() {
        return passord2;
    }

    /**
     * Setter passord2
     * @param passord2
     */
    public void setPassord2(String passord2) {
        this.passord2 = passord2;
    }
    
    /**
     * Metode som er true hvis man skal få tilgang til å forandre
     * @return editable boolean
     */
    public boolean isEditable() {
        return editable;
    }

    /**
     * Setter boolean til true hvis man skal kunne editere; false for ikke editering
     * @param editable
     */
    public void setEditable(boolean editable) {
        this.editable = editable;
    }
    
    
    
    /**
     * Konstruktør til deltaker
     * @param fnavn 
     * @param enavn 
     * @param epost 
     * @param adresse 
     * @param kjonn 
     * @param faar
     * @param deltaker_id  
     */
    public Deltaker(String fnavn, String enavn, String epost, String adresse, int faar, String kjonn, int deltaker_id){
        this.fnavn = fnavn;
        this.enavn = enavn;
        this.epost = epost;
        this.adresse = adresse;
        this.faar = faar;
        this.kjonn = kjonn;
        this.deltaker_id = deltaker_id;
    }
    /**
     * Metode som returnerer en int-verdi ettersom dette objektet har satt verdien kjonn til Mann eller Dame og har satt ediatable til false.
     * @return negativ intverdi er feil, 1 for mann, 2 for dame
     */
    public int erMann(){
        if(kjonn==null)return -1;
        if(kjonn.equals("Mann") && !editable) return 1;
        if(kjonn.equals("Dame") && !editable) return 2;
        return -2;
    }
    /**
     * Konstruktør til deltaker; tom
     */
    public Deltaker(){}
    
    /**
     * Hent fornavn
     * @return String fornavn
     */
    public String getFnavn(){return fnavn;}
    /**
     * Hent etternavn
     * @return String etternavn
     */
    public String getEnavn(){return enavn;}
    /**
     * Hent epost
     * @return String epost
     */
    public String getEpost(){return epost;}
    /**
     * Hent adresse
     * @return String adresse
     */
    public String getAdresse(){return adresse;}
    /**
     * Hent fødtselsår
     * @return int fødtselsår
     */
    public int getFaar(){return faar;}
    /**
     * Hent kjønn
     * @return String kjønn
     */
    public String getKjonn(){return kjonn;}
    /**
     * Hent deltaker_id
     * @return int deltaker_id
     */
    public int getDeltaker_id(){return deltaker_id;}
    
    /**
     * Sett fornavn
     * @param nyttNavn 
     */
    public void setFnavn(String nyttNavn){fnavn=nyttNavn;}
    /**
     * Sett etternavn
     * @param nyttNavn 
     */
    public void setEnavn(String nyttNavn){enavn=nyttNavn;}
    /**
     * Sett epost
     * @param nyEpost 
     */
    public void setEpost(String nyEpost){
        epost=nyEpost;
    }
    /**
     * Sett adresse
     * @param nyAdresse 
     */
    public void setAdresse(String nyAdresse){adresse=nyAdresse;}
    /**
     * Sett fødtselsår
     * @param nyFaar 
     */
    public void setFaar(int nyFaar){faar=nyFaar;}
    /**
     * Sett kjønn
     * @param nyttKjonn 
     */
    public void setKjonn(String nyttKjonn){kjonn=nyttKjonn;}
    /**
     * Sett deltaker_id
     * @param deltaker_id 
     */
    public void setDeltaker_id(int deltaker_id){this.deltaker_id = deltaker_id;}
    
    /**
     * Sjekker om deltaker har innparametere
     * @return String ikke_ok/ok
     */
    public String sjekkDeltaker(){return (fnavn.equals("") || enavn.equals("") || adresse.equals("") || kjonn.equals("") || faar == 0 || fnavn == null || enavn == null || adresse == null || kjonn == null) ? "ikke_OK" : "OK";}
    
    @Override
    public String toString(){
        return fnavn + " " + enavn + ", epost: " + epost;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Deltaker other = (Deltaker) obj;
        if ((this.fnavn == null) ? (other.fnavn != null) : !this.fnavn.equals(other.fnavn)) {
            return false;
        }
        if ((this.enavn == null) ? (other.enavn != null) : !this.enavn.equals(other.enavn)) {
            return false;
        }
        if ((this.epost == null) ? (other.epost != null) : !this.epost.equals(other.epost)) {
            return false;
        }
        if ((this.adresse == null) ? (other.adresse != null) : !this.adresse.equals(other.adresse)) {
            return false;
        }
        if (this.faar != other.faar) {
            return false;
        }
        if ((this.kjonn == null) ? (other.kjonn != null) : !this.kjonn.equals(other.kjonn)) {
            return false;
        }
        if (this.deltaker_id != other.deltaker_id) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 5;
        hash = 53 * hash + (this.fnavn != null ? this.fnavn.hashCode() : 0);
        hash = 53 * hash + (this.enavn != null ? this.enavn.hashCode() : 0);
        hash = 53 * hash + (this.epost != null ? this.epost.hashCode() : 0);
        hash = 53 * hash + (this.adresse != null ? this.adresse.hashCode() : 0);
        hash = 53 * hash + this.faar;
        hash = 53 * hash + (this.kjonn != null ? this.kjonn.hashCode() : 0);
        hash = 53 * hash + this.deltaker_id;
        return hash;
    }
    
    private String validerPassord(){
        int tall = 0;
        int bokst = 0;
        int spess = 0;
        for(int i = 0 ; i < passord1.length() ; i++){
            char a = passord1.charAt(i);
            if((a >= 'a' && a <= 'z') || (a >= 'A' && a <= 'Z')) bokst++;
            else if(a <= '9' && a >= '0') tall++;
            else spess++;
        }
        if(tall == 0) return "Ingen tall";
        if(bokst == 0) return "Ingen bokstaver";
        if(spess == 0) return "Ingen spesialtegn";
        if(passord1.length() < 6) return "For kort passord";
        return "Passord OK";
    }

    /**
     * Sjekker passordet om det første passordet stemmer overens med passord2
     * @return Passord OK / Passord stemmer ikke
     */
    public String sjekkPassord() {
        return validerPassord().equals("Passord OK") ? 
                !passord1.equals(passord2) ? 
                "Passord stemmer ikke" : 
                validerPassord() : validerPassord();
    }
    
    public static void main(String[]args){
        Deltaker d = new Deltaker();
        d.passord1 = "asd1æa";
        d.passord2 = "asd1æa";
        if(d.sjekkPassord().equals("Passord OK")) System.out.println("TEST 1: OK");
        else System.out.println("TEST 1: FAIL!" + d.sjekkPassord());
        d.passord1 = "asd";
        d.passord2 = "asd";
        if(d.sjekkPassord().equals("Ingen tall")) System.out.println("TEST 2: OK");
        else System.out.println("TEST 2: FAIL!" + d.sjekkPassord());
        d.passord1 = "å!#";
        d.passord2 = "å!#";
        if(d.sjekkPassord().equals("Ingen tall")) System.out.println("TEST 3: OK");
        else System.out.println("TEST 3: FAIL!" + d.sjekkPassord());
        d.passord1 = "a123";
        d.passord2 = "a123";
        if(d.sjekkPassord().equals("Ingen spesialtegn")) System.out.println("TEST 4: OK");
        else System.out.println("TEST 4: FAIL!" + d.sjekkPassord());
        d.passord1 = "aæ1";
        d.passord2 = "aæ1";
        if(d.sjekkPassord().equals("For kort passord")) System.out.println("TEST 5: OK");
        else System.out.println("TEST 5: FAIL!" + d.sjekkPassord());
        d.passord1 = "asd123æøå";
        d.passord2 = "asdæøå123";
        if(d.sjekkPassord().equals("Passord stemmer ikke")) System.out.println("TEST 6: OK");
        else System.out.println("TEST 6: FAIL!" + d.sjekkPassord());
        d.passord1 = "";
        d.passord2 = "";
        if(d.sjekkPassord().equals("Ingen tall")) System.out.println("TEST 7: OK");
        else System.out.println("TEST 7: FAIL!" + d.sjekkPassord());

    }
}
